/**
 * 判断内容是否为整数
 */
function isInt(content){
    return content.length > 0 && content % 1 === 0;
}

/**
 * 判断内容是否可以转换为浮点数
 */
function isFloat(content){
    var float = parseFloat(content);
    if(isNaN(float)){
        return false;
    }else{
        return true;
    }
}

/**
 * 验证手机号码是否符合格式
 */
function isValidPhoneNumber(number){
    var reg = /^1[3|4|5|7|8][0-9]\d{8,11}$/;
    return reg.test(number);
}

/**
 * 验证账号只能是数字和小写字母
 */
function isValidUsername(username){
    var reg = /^[a-z0-9-]*$/;
    return reg.test(username);
}

/**
 * 获取Url包括参数
 */
function getUrlAndParams(){
    return window.location.href;
}

/**
 * 获取Url不带参数
 */
function getUrlNoParams(){
    return window.location.protocol + '//' + window.location.host + window.location.pathname;
}

/**
 * 获取Url所有参数串
 */
function getUrlParams(){
    return window.location.search.replace('?', '');
}

/**
 * 获取Url里的参数
 */
function getUrlParam(key){
    const urlParams = new URLSearchParams(window.location.search);
    if(urlParams){
        const value = urlParams.get(key);
        if(value){
            return decodeURIComponent(value);
        }
    }
    return '';
}

/**
 * 获取完整的Url，并修改里面的参数值，没有则加上
 */
function getUrlAndChangeParam(param, newValue){
    var rootUrl = getUrlAndParams();
    return changeUrlParam(rootUrl, param, newValue);
}

/**
 * 修改注定Url里的参数值，没有则加上
 */
function changeUrlParam(url, param, newValue){
    var newValueEncode = encodeURIComponent(newValue);
    //alert(newValueEncode);
    var urlArr = url.split('?');
    if(urlArr.length == 1){
        return url + '?' + param + '=' + newValueEncode;
    }
    var rootUrl = urlArr[0];
    var query = urlArr[1];
    var params = '';
    var vars = query.split('&');
    for(var i = 0; i < vars.length; i++){
        var pair = vars[i].split('=');
        if(!isNullOrEmpty(pair[0]) && pair[0] != param){
            if(!isNullOrEmpty(params)){
                params = params + '&';
            }
            params = params + pair[0] + '=' + pair[1];
        }
    }
    var newUrl = rootUrl + '?' + params + '&' + param + '=' + newValueEncode;
    return newUrl.replace('?&', '?');
}

/**
 * 设置选择器的默认值
 */
function setSelectValue(selectId, value){
    $('#' + selectId).val(value);
    $('#' + selectId).children('option').each(function(){
        if($(this).val() == value){
            $(this).attr('selected', 'selected');
        }
    });
}

/**
 * 设置layui选择器的内容列表
 * list = [{title:'选项1', value: '1'},{title:'选项2', value: '2'}]
 */
function setLayuiSelectList(selectId, list, form){
    $('#' + selectId).empty();
    for(var i = 0; i < list.length; i++){
        var option = $('<option>').val(list[i].value).text(list[i].title);
        $('#' + selectId).append(option);
    }
    form.render('select');
}

/**
 * 设置layui选择器的默认值
 */
function setLayuiSelectValue(selectId, value, form){
    $('#' + selectId).val(value);
    form.render('select');
}

/**
 * 读取多选框
 */
function getCheckboxValue(checkboxId){
    return document.getElementById(checkboxId).checked;
}

/**
 * 设置多选框
 */
function setCheckboxValue(checkboxId, value){
    if(value){
        $('#' + checkboxId).attr('checked', 'checked');
    }else{
        $('#' + checkboxId).removeAttr('checked');
    }
}

/**
 * 读取单选框
 * @param radioName
 */
function getRadioValue(radioName){
    return $('input[name=\'' + radioName + '\']:checked').val();
}

/**
 * 设置单选框
 * @param radioName
 * @param value
 */
function setRadioValue(radioName, value){
    $('input[name=\'' + radioName + '\'][value=\'' + value + '\']').attr('checked', true);
}

/**
 * 读取Cookie，添加前缀以应对同IP不同端口Cookie覆盖问题
 */
function setCookie(prefix, key, value){
    Cookies.set(prefix + '-' + key, value, {expires: 7});
}

/**
 * 设置Cookie，自动添加前缀以应对同IP不同端口Cookie覆盖问题
 */
function getCookie(prefix, key){
    return Cookies.get(prefix + '-' + key);
}

/**
 * 移除Cookie，自动添加前缀以应对同IP不同端口Cookie覆盖问题
 */
function removeCookie(prefix, key){
    Cookies.remove(prefix + '-' + key);
}

/**
 * 保留小数点后几位（向下取）
 * @param content 输入的内容
 * @param decimal 保留的位数
 */
function keepPointDecimal(content, decimal){
    var contentStr = content + '';
    var contentArr = contentStr.split('.');
    if(contentArr.length == 1){
        contentStr = contentStr + '.';
        for(var i = 0; i < decimal; i++){
            contentStr = contentStr + '0';
        }
        return contentStr;
    }else if(contentArr.length > 1){
        return contentArr[0] + contentStr.substr(contentStr.indexOf('.'), decimal + 1);
    }else{
        return content;
    }
}

/**
 * 复制内容到系统剪贴板(兼容Android/iOS)
 */
async function copy(content){
    try {
        await navigator.clipboard.writeText(content);
    } catch (err) {
        console.error('无法复制文本: ', err);
    }

    /**方法已过时
    //创建临时div内容容器
    var input = document.createElement('input');
    document.getElementsByTagName('body')[0].appendChild(input);
    input.innerHTML = content;
    const range = document.createRange();
    range.selectNode(input);
    const selection = window.getSelection();
    if(selection.rangeCount > 0){
        selection.removeAllRanges();
    }
    selection.addRange(range);
    document.execCommand('copy');
    input.remove();
     */
}

/**
 * 判断字符串str里是否包含字符char
 */
function stringContains(str, char){
    if(!isNullOrEmpty(str) && !isNullOrEmpty(char)){
        return str.indexOf(char) != -1;
    }
    return false;
}

/**
 * 使用post方式打开新页面
 */
function postRedirect(url, params){
    var temp_form = document.createElement('form');
    temp_form.action = url;
    temp_form.target = '_self';
    temp_form.method = 'post';
    temp_form.style.display = 'none';
    if(params != null){
        for(var key in params){
            var opt = document.createElement('textarea');
            opt.name = key;
            opt.value = params[key];
            temp_form.appendChild(opt);
        }
    }
    document.body.appendChild(temp_form);
    temp_form.submit();
}

/**
 * 向下取保留小数点后几位
 */
function floorToDecimal(content, scale){
    var scaleV = Math.pow(10, scale);
    return Math.floor(content * scaleV) / scaleV;
}

/**
 * 四舍五入保留小数点后几位
 */
function roundToDecimal(content, scale){
    return content.toFixed(scale);
}

/**
 * 获取当前时间戳（秒）
 */
function getTimestampS(){
    return Math.round(new Date().getTime() / 1000);
}

/**
 * 获取当前时间戳（豪秒）
 */
function getTimestampMS(){
    return new Date().getTime();
}

/**
 * '2024-07-16 01:23:08'转时间戳（秒）
 */
function dateStr2TimestampS(dateStr){
    const date = new Date(dateStr);
    return Math.floor(date.getTime() / 1000);
}

/**
 * 时间戳（秒）转字符串时间格式'2024-07-16 01:23:08'
 */
function timestampSToDateStr(timestamp){
    const date = new Date(timestamp * 1000);
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

/**
 * 获取当前月份的天数
 */
function getCurrMonthTotalDays(){
    var date = new Date();
    var month = date.getMonth() + 1;
    switch(month){
        case 2:
            if(date.getFullYear() % 4 == 0){
                return 29;
            }
            return 28;
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            return 31;
    }
    return 30;
}

/**
 * 获取年月日时分秒毫秒做文件名
 */
function getTimeForFileName(){
    var date = new Date();
    var month = date.getMonth() + 1;
    return date.getFullYear() + addZero(month) + addZero(date.getDate()) + addZero(date.getHours()) + addZero(date.getMinutes()) + addZero(date.getSeconds()) + date.getMilliseconds() + Math.round(Math.random() * 1000);
}

/**
 * 小于10的数字前加0
 */
function addZero(num){
    if(num < 10){
        return '0' + num;
    }
    return '' + num;
}

//获取今天日期(年-月-日)
function getDate(){
    var currentDate = new Date();
    var formatter = new Intl.DateTimeFormat('zh-CN', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit',
        timeZone: 'Asia/Shanghai',
    });
    return formatter.format(currentDate).replace('/', '-').replace('/', '-');//这里要转换两次“-”
}

//获取当前时间(时:分:秒)
function getTime(){
    var currentDate = new Date();
    var formatter = new Intl.DateTimeFormat('zh-CN', {
        hour: '2-digit',
        minute: '2-digit',
        second: '2-digit',
        hour12: false, // 使用24小时制
        timeZone: 'Asia/Shanghai',
    });
    return formatter.format(currentDate);
}

//获取当前时间
function getDateTime(timeZone = 'Asia/Shanghai'){
  var formatter = new Intl.DateTimeFormat('zh-CN', {
	year: 'numeric',
	month: '2-digit',
	day: '2-digit',
	hour: '2-digit',
	minute: '2-digit',
	second: '2-digit',
	hour12: false, // 使用24小时制
	timeZone: timeZone,
  });
  return formatter.format(Date.now()).replace(/\//g, '-').replace(',', '');
}

//获取本月第一天的日期
function getFirstDayThisMonth(){
    let date = getDate();
    let arr = date.split('-');
    return arr[0] + '-' + arr[1] + '-01';
}

//获取本月最后一天的日期
function getLastDayThisMonth(){
    let date = getDate();
    let arr = date.split('-');
    let year = parseInt(arr[0]);
    let month = parseInt(arr[1]);
    let day = 30;
    if(month == 2){
        day = year % 4 == 0 ? 29 : 28;
    }else if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
        day = 31;
    }
    return arr[0] + '-' + arr[1] + '-' + day;
}

/**
 * 原生方法，仅在特定DIV里查找id,类似Jquery里的$('#divId').find('$targetId')
 */
function findElementById(parentDiv, id){
    var result = null;
    find(parentDiv, id);

    function find(parent, id){
        for(var i = 0; i < parent.children.length; i++){
            if(parent.children[i].id == id){
                result = parent.children[i];
            }
            find(parent.children[i], id);
        }
    }

    return result;
}

/**
 * 去掉文件后缀名(支持文件名含多个点xxx.xx.xx.jpg)
 */
function removeSuffix(fileName){
    if(!isNullOrEmpty(fileName)){
        var name = '';
        var lastDotIndex = 0;
        for(var i = 0; i < fileName.length; i++){
            if(fileName.charAt(i) == '.'){
                lastDotIndex = i;
            }
        }
        return fileName.substring(0, lastDotIndex);
    }
    return '';
}

/**
 * 从文件浏览器里选择图片后显示预览
 */
function showImgFromInputFile(file, imgId){
    //显示预览
    var img = new Image();
    img.onload = function(){
        $('#' + imgId).attr('src', img.src);
    };
    img.src = getLocalUrlFromInputFile(file);
}

/**
 * 从input file里获取文件的本地url
 */
function getLocalUrlFromInputFile(file){
    var url = null;
    if(window.createObjectURL != undefined){
        url = window.createObjectURL(file);
    }else if(window.webkitURL != undefined){
        url = window.webkitURL.createObjectURL(file);
    }else if(window.URL != undefined){
        url = window.URL.createObjectURL(file);
    }
    return url;
}

/**
 * Unicode转中文(文中不是Unicode的部分原样输出)
 */
function unicodeToChinese(str){
    return str.replace(/\\u[\dA-F]{4}/gi, function(match){
        return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
    });
}

/**
 * 设置div旋转角度
 */
function setDivAngle(divId, angle){
    var div = document.getElementById(divId);
    div.style.webkitTransform = 'rotate(' + angle + 'deg)';
    div.style.mozTransform = 'rotate(' + angle + 'deg)';
    div.style.msTransform = 'rotate(' + angle + 'deg)';
    div.style.oTransform = 'rotate(' + angle + 'deg)';
    div.style.transform = 'rotate(' + angle + 'deg)';
}

/**
 * 按0-100返回绿到红
 */
function getColorByPercent(percent){
    var one = (150 + 255) / 100;
    var r = 0;
    var g = 0;
    var b = 0;
    if(percent < 50){
        r = one * percent;
        g = 255;
    }
    if(percent >= 50){
        g = 255 - ((percent - 50) * one);
        r = 255;
    }
    r = parseInt(r);
    g = parseInt(g);
    b = parseInt(b);
    return 'rgb(' + r + ',' + g + ',' + b + ')';
}

/**
 * 判断是否是PC段还是移动端
 */
function isPC(){
    var userAgentInfo = navigator.userAgent;
    var Agents = [
        'Android', 'iPhone',
        'SymbianOS', 'Windows Phone',
        'iPad', 'iPod',
    ];
    var flag = true;
    for(var v = 0; v < Agents.length; v++){
        if(userAgentInfo.indexOf(Agents[v]) > 0){
            flag = false;
            break;
        }
    }
    return flag;
}

/**
 * 当前是否在微信浏览器
 */
function isWeixin(){
    var ua = navigator.userAgent.toLowerCase();
    if(ua.match(/MicroMessenger/i) == 'micromessenger'){
        return true;
    }else{
        return false;
    }
}

/**
 * 当前是否在Android系统
 */
function isAndroid(){
    var u = navigator.userAgent;
    var isAndroid = u.indexOf('Android') &gt; -1 || u.indexOf('Linux') &gt; -1;
    return ios;
}

/**
 * 当前是否在iOS系统
 */
function isIOS(){
    var u = navigator.userAgent;
    var ios = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
    return ios;
}

/**
 * 返回index,可以用来关闭
 */
function layWait(msg){
    return layer.alert(msg, {
        type: 1,
        title: 0,
        closeBtn: 0,
        content: '<div style="text-align:center;padding:20px">' + msg + '</div>',
    });
}

/**
 * 返回index,可以用来关闭
 */
function layAlert(msg, onClose){
    return layer.alert(msg, {
        closeBtn: 0,
        btnAlign: 'c',
        skin: 'layui-layer-molv',
        title: '提示',
        content: '<div style="text-align:center">' + msg + '</div>',
    }, onClose);
}

/**
 * 返回index,可以用来关闭
 */
function layConfirm(msg, onConfirm, onClose){
    return layer.confirm(msg, {
        closeBtn: 0,
        btnAlign: 'c',
        skin: 'layui-layer-molv',
        title: '提示',
        content: '<div style="text-align:center">' + msg + '</div>',
    }, function(index){
        layer.close(index);
        if(onConfirm){
            onConfirm();
        }
    }, onClose);
}

/**
 * 自动关闭的提示
 */
function layTip(msg){
    layer.msg(msg, {
        time: 1000,
    });
}

/**
 * 关闭layui打开的弹窗
 */
function layClose(){
    layer.closeAll();
}

function gteDateFromUrl(key){
    var date = getUrlParam(key);
    if(date != ''){

        var arr = date.split('-');
        if(arr.length == 3){
            if(arr[1].length == 1){
                arr[1] = '0' + arr[1];
            }
            if(arr[2].length == 1){
                arr[2] = '0' + arr[2];
            }
            return arr[0] + '-' + arr[1] + '-' + arr[2];
        }
        return date;
    }
    return '';
}

function isString(value){
    return typeof value == 'string';
}

function toString(value){
    if(typeof value != 'string'){
        return JSON.stringify(value);
    }
    return value;
}

function isNullOrEmpty(str){
    return str == null || str.length == 0;
}

function getCookie(key){
    return document.cookie(key);
}

/**
 * lifetime:单位秒
 */
function setCookie(key, value, lifetime){
    document.cookie = key + '=' + value + '; expires=' + new Date(Date.now() + lifetime).toUTCString();
}

function delCookie(key){
    document.cookie = key + '=; expires=' + new Date(0).toUTCString();
}